#include "Entry.h"

const int CEntry::MAX_CHARSPERLINE = 256;

CZenEngine CEntry::zen;

CEntry::CEntry()
{
	m_pstrText = new char[CEntry::MAX_CHARSPERLINE];
	
	if (m_pstrText)
		ZeroMemory(m_pstrText, sizeof(char[CEntry::MAX_CHARSPERLINE]));
	else
		m_pstrText = 0;

	m_pNext = 0;
	m_VerticalPos = 0;
}

CEntry::~CEntry()
{
	if (m_pstrText)
	{
		delete m_pstrText;
		m_pstrText = 0;
	}
}

//Retourneer het volgende CEntry object
CEntry * CEntry::GetNext()
{
	return m_pNext;
}

//Stel de volgende CEntry in
void CEntry::SetNext(CEntry * pNext)
{
	m_pNext = pNext;
}

//Teken de tekst uit het object op een surface
int CEntry::RenderText(int NumHorzChars, DWORD * pData, int DestPitch)
{
	int Length = strlen(m_pstrText);

	if (Length > NumHorzChars)
		Length = NumHorzChars;

	//Roep PrintString() aan om de tekst op een surface te renderen. Dit is dus NIET de backbuffer!!!
	if (CZenEngine::m_Mode == D2)
		zen.PrintString(10, m_VerticalPos, m_pstrText, TRUE, D3DCOLOR_ARGB(0,255,0,255), pData, DestPitch);
	else
		zen.PrintString(10, m_VerticalPos, m_pstrText, TRUE, D3DCOLOR_ARGB(255,255,0,255), pData, DestPitch);

	return 0;
}

//Voeg een karakter toe of verwijder er een uit de huidige CEntry
int CEntry::OnChar(char Key)
{
	//Backspace --> Verwijder het laatste karakter
	if (Key == '\b')
	{
		char pstrTemp[CEntry::MAX_CHARSPERLINE];
		int Length = strlen(m_pstrText);

		if (Length == 0)
			return S_OK;

		Length--;
		CopyMemory(pstrTemp, m_pstrText, Length);
		ZeroMemory(m_pstrText, sizeof(char[CEntry::MAX_CHARSPERLINE]));
		CopyMemory(m_pstrText, pstrTemp, Length);
	}
	else
	{
		//Als de buffer al vol is, geven we een fout terug
		if (strlen(m_pstrText) > CEntry::MAX_CHARSPERLINE)
			return E_FAIL;

			//Voeg karakter toe aan de string
		strncat(m_pstrText, &Key, 1);
	}

	return S_OK;
}

//Retourneer de tekst in het object
int CEntry::SetText(char * pstrText)
{
	ZeroMemory(m_pstrText, sizeof(char[CEntry::MAX_CHARSPERLINE]));
	int Length = strlen(pstrText);

	if (Length > CEntry::MAX_CHARSPERLINE)
		Length = CEntry::MAX_CHARSPERLINE;

	CopyMemory(m_pstrText, pstrText, strlen(pstrText));

	return S_OK;
}

int CEntry::GetText(char * pstrText, int Length)
{
	if (Length > CEntry::MAX_CHARSPERLINE)
		Length = CEntry::MAX_CHARSPERLINE;

	CopyMemory(pstrText, m_pstrText, Length);

	return S_OK;
}

//Geef het aantal karakters van de tekst weer
int CEntry::GetTextLength()
{
	return strlen(m_pstrText);
}

//Stel de verticale positie in van dit object
void CEntry::SetVerticalPos(int Pos)
{
	m_VerticalPos = Pos;
}

//Geef de verticale positie terug
int CEntry::GetVerticalPos()
{
	return m_VerticalPos;
}
